// 后台主要控制器
const xtpl = require('xtpl');
const path = require('path');
const md5 = require('md5');	// 加密算法，不能反向解密
const captchapng = require('captchapng');
const db = require('../configs/database.js');
const baseCtr = require('./baseController.js');
//加载邮箱模块
const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');
const wellknown = require('nodemailer-wellknown');

var config = wellknown('QQ');

// config.auth = {
// 	user:'2231998614@qq.com',
// 	pass:'fucuurtykryxeafa',//授权码
// }
config.auth = {
	user: '3176027419@qq.com',
	pass: 'jnikugrszpizdhef',	// 授权码
}

// 后台主页
module.exports.mainIndex = function(req,res){
	var data =[]
	//先进行分类查询
	db.query('select sub_id,count(stu_id) as snum from pre_student_subject_data group by sub_id',data).then(function(sub_data){
		console.log(sub_data);
			// 显示视图
			db.table('subject').field('sub_name').select().then(function(count1){
				db.table('subject').count('sub_id').then(function(count1){
					db.table('admin').count('admin_id').then(function(count2){
						db.table('student').count('stu_id').then(function(count3){
							db.table('class').count('class_id').then(function(count4){
								xtpl.renderFile(
									path.join(__dirname,'../views/admin/main_index.html'),	// 加载视图文件
									{
										page:'mainIndex',	// 页面名称（后台菜单的判断显示）
										count1:count1,
										count2:count2,
										count3:count3,
										count4:count4,
										sub:sub_data
									},
									function(err,content){
										// 设置输出的内容类型 html
										res.setHeader('Content-Type','text/html;charset=utf-8');
										res.send(content);
									}
								)
						
							})
						
						})

					})


				})	
		})

	})


}

// 后台注册页
module.exports.register = function(req,res){


	// 显示视图
	xtpl.renderFile(
		path.join(__dirname,'../views/admin/register.html'),	// 加载视图文件
		{},
		function(err,content){
			// 设置输出的内容类型 html
			res.setHeader('Content-Type','text/html;charset=utf-8');
			res.send(content);
		}
	)
}

// 注册操作
module.exports.registerData = function(req,res){
	// console.log(req.body)
	// 逻辑：通过邮箱查询账号是否存在，不存在可以注册，存在提示
	db.table('admin').where({admin_email:req.body.email}).find().then(function(result){
		if(JSON.stringify(result)=='{}'){

			//验证码验证
			if(req.signedCookies.code==undefined){
				res.send(JSON.stringify({error:1,msg:'验证码已过期,请重新发送'}))
				return false
			}
			if(req.signedCookies.code!=req.body.code){
				res.send(JSON.stringify({error:2,msg:'验证码错误'}))
				return false
			}


			// 可以注册
			var data = {
				admin_email:req.body.email,
				admin_pwd:md5(req.body.pwd),
				register_time:(new Date().getTime())/1000
			};
			db.table('admin').add(data).then(function(){
				// 注册成功了
				res.send(JSON.stringify({error:0,msg:'注册成功'}))  // json字符串
			});
		}else{
			// 要返回json字符串
			res.send(JSON.stringify({error:1,msg:'该邮箱已被注册'}));
		}
	})
}

//发送邮箱验证码
module.exports.sendCode = function(req,res){
	//post 利用body获取数据(需要配置)
	//get 利用query
	var email = req.body.email;
	db.table('admin').where({admin_email:email}).find().then(function(result){
		if(JSON.stringify(result)=='{}'){

			
				var code = baseCtr.randomString()

				res.cookie("code",code,{maxAge:1*60*1000,signed:true});  //设置cookie和过期时间
				//发送操作
				//发送操作
				var transporter = nodemailer.createTransport(smtpTransport(config));
				var mailOptions = {
					from:"讯奇科技<3176027419@qq.com>",//发件人
					to:email,//收件人
					subject:"注册账号",
					text:"text plain",
					html:"<div>尊敬的用户，您的验证码：<span style='color:red;'>"+code+"</span></div>"
				};
				//发送方法
				transporter.sendMail(mailOptions, function(error, info){
					if(error){
						return console.log(error);
					}
					// console.log('Message sent: ' + info.response);
					res.send(JSON.stringify({error:0,msg:'发送成功'}))
				});
			}else{
				res.send(JSON.stringify({error:1,msg:'该邮箱已被注册'}));
			}
			

		})
}

// 后台登录页
module.exports.login = function(req,res){
	// 显示视图
	xtpl.renderFile(
		path.join(__dirname,'../views/admin/login.html'),	// 加载视图文件
		{},
		function(err,content){
			// 设置输出的内容类型 html
			res.setHeader('Content-Type','text/html;charset=utf-8');
			res.send(content);
		}
	)
}

// 登录操作
module.exports.loginData = function(req,res){
	//图片验证码验证
		console.log(req.session.imgcode)
		console.log(req.body.code)
	if(req.session.imgcode!=req.body.code){//一定要千万注意大小写
		res.send(JSON.stringify({error:1,msg:'验证码错误'}))
		return false
	}else if(req.session.imgcode==undefined){
		res.send(JSON.stringify({error:2,msg:'验证码已过期，请刷新重试'}))
		return false
	}

	// 逻辑：查询邮箱+密码
	db.table('admin').where({admin_email:req.body.email,admin_pwd:md5(req.body.pwd)}).find().then(function(result){

			// 把邮箱记录到session里面
			req.session.email = req.body.email;

		if(JSON.stringify(result)!='{}'){
			// 成功登录
			res.send(JSON.stringify({error:0,msg:'登录成功'}))
			
		}else{
			res.send(JSON.stringify({error:1,msg:'邮箱或密码错误'}))
		}
	});
}
// 图片验证码
module.exports.imgCode = function(req,res){

	var code = parseInt(Math.random() * 9000 + 1000);//随机数
	//记录验证码
    req.session.imgcode = code;
    var p = new captchapng(100, 30, code);
    p.color(0, 0, 0, 0);
    p.color(80, 80, 80, 255);
    var img = p.getBase64();
    var imgbase64 = Buffer.from(img, 'base64');
    res.writeHead(200, {
        'Content-Type': 'image/png'
    });
    res.end(imgbase64);



}

//退出登录
module.exports.logout = function(req,res){
	// 删除session里面的email
	req.session.email = undefined;

	res.redirect('/admin/main/login');
	// baseCtr.sendMsg('您已退出后台',res);	// 是后退的，不行
}

//管理员信息
module.exports.adminInfo = function(req,res){
	res.send(req.session.email)
}

